package com.ftwj.mapper;

import com.ftwj.entity.UserAppointmentInfo;
import com.ftwj.vo.UserAppointmentVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;


import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Mapper
public interface UserAppointmentInfoMapper {

    /**
     * 插入预约信息
     *
     * @param userAppointmentInfo 预约信息
     */
    void insertAppointmentInfo(UserAppointmentInfo userAppointmentInfo);

    /**
     * 根据ID查找预约信息
     *
     * @param id 预约信息ID
     * @return 预约信息
     */
    UserAppointmentInfo findAppointmentInfoById(String id);

    /**
     * 更新预约信息
     *
     * @param userAppointmentInfo 预约信息
     */
    void updateAppointmentInfo(UserAppointmentInfo userAppointmentInfo);

    /**
     * 根据ID删除预约信息
     *
     * @param id 预约信息ID
     */
    void deleteAppointmentInfo(@Param("id") String id);

    /**
     * 查找所有预约信息（状态为正常）
     *
     * @return 预约信息列表
     */
    List<UserAppointmentInfo> findAllAppointmentInfo(@Param("userId") String userId);

    /**
     * 将预约状态更新为进行中
     *
     * @param now 当前时间
     */
    void updateAppointmentStateToInUse(Date now);

    /**
     * 将预约状态更新为已释放
     *
     * @param now 当前时间
     */
    void updateAppointmentStateToReleased(Date now);

    /**
     * 计算冲突的预约数量
     *
     * @param seatId 座位ID
     * @param startTime 预约开始时间
     * @param endTime 预约结束时间
     * @param appointmentId 预约ID（用于排除当前预约）
     * @return 冲突的预约数量
     */
    int countConflictingAppointments(@Param("seatId") String seatId,
                                     @Param("startTime") Date startTime,
                                     @Param("endTime") Date endTime,
                                     @Param("appointmentId") String appointmentId);


}
